describe('修正后的API集成测试 - 使用正确的端点', () => {
  let testData

  before(() => {
    cy.fixture('test-data').then((data) => {
      testData = data
    })
  })

  describe('🔍 作业员验证 - 正确端点', () => {
    it('应该使用正确的端点验证作业员', () => {
      // 使用正确的端点：/api/worker/{id} 而不是 /api/workers/{id}
      cy.apiRequest('GET', `/api/worker/${testData.operators.valid.operatorId}`)
        .then((response) => {
          expect(response.status).to.equal(200)
          cy.log(`✅ 作业员查询实际响应: ${response.body.code} - ${response.body.message}`)
          
          if (response.body.code === testData.responseCodes.success) {
            expect(response.body.data).to.exist
            cy.log('✅ 作业员验证成功 - 真实数据库查询')
          } else {
            expect(response.body.code).to.equal(testData.responseCodes.dataNotFound)
            cy.log('📝 作业员不存在 - 这是正常的业务逻辑')
          }
        })
    })

    it('应该正确处理不存在的作业员', () => {
      cy.apiRequest('GET', `/api/worker/${testData.operators.invalid.operatorId}`)
        .then((response) => {
          expect(response.status).to.equal(200)
          expect(response.body.code).to.equal(testData.responseCodes.dataNotFound)
          cy.log(`✅ 正确处理无效作业员: ${response.body.code} - ${response.body.message}`)
        })
    })
  })

  describe('📋 SMT流程启动 - 正确端点', () => {
    it('应该使用正确的端点启动SMT流程', () => {
      // 使用实际的API：/api/smt/initiatePickup
      const smtStartRequest = {
        orderNo: testData.orders.valid.orderNo,
        orderBranchNo: testData.orders.valid.surface,
        mounterId: testData.orders.valid.machineId,
        smtSide: 'TOP'
      }

      cy.apiRequest('POST', '/api/smt/initiatePickup', smtStartRequest)
        .then((response) => {
          expect(response.status).to.equal(200)
          cy.log(`📋 SMT流程启动响应: ${response.body.code} - ${response.body.message}`)
          
          // 记录响应结果以验证是否有数据库操作
          if (response.body.code === testData.responseCodes.success) {
            cy.log('✅ SMT流程启动成功 - 可能有真实数据库操作')
            expect(response.body.data).to.exist
          } else {
            cy.log(`📋 SMT流程启动业务结果: ${response.body.code}`)
          }
        })
    })
  })

  describe('📝 扫描记录保存 - 正确端点', () => {
    it('应该使用正确的端点保存扫描记录', () => {
      // 使用实际的API：/api/smt/saveScanRecord
      const scanRecordRequest = {
        orderInfo: {
          orderNo: testData.orders.valid.orderNo,
          orderBranchNo: testData.orders.valid.surface,
          mounterId: testData.orders.valid.machineId,
          smtSide: 'TOP',
          operatorId: testData.operators.valid.operatorId
        },
        scanResults: [
          {
            partId: testData.parts.valid[0].partId,
            rollNo: testData.parts.valid[0].rollNo,
            lotNo: testData.parts.valid[0].lotNo,
            scanTime: new Date().toISOString(),
            scanStatus: 'SUCCESS'
          }
        ]
      }

      cy.apiRequest('POST', '/api/smt/saveScanRecord', scanRecordRequest)
        .then((response) => {
          expect(response.status).to.equal(200)
          cy.log(`📝 扫描记录保存响应: ${response.body.code} - ${response.body.message}`)
          
          if (response.body.code === testData.responseCodes.success) {
            cy.log('🎉 扫描记录保存成功 - 真实数据库INSERT操作')
            expect(response.body.data).to.exist
          } else {
            cy.log(`📝 扫描记录保存业务结果: ${response.body.code}`)
          }
        })
    })

    it('应该使用正确的端点保存作业员确认', () => {
      // 使用实际的API：/api/smt/saveOperatorConfirm
      const operatorConfirmRequest = {
        orderNo: testData.orders.valid.orderNo,
        orderBranchNo: testData.orders.valid.surface,
        mounterId: testData.orders.valid.machineId,
        smtSide: 'TOP',
        operatorId: testData.operators.valid.operatorId
      }

      cy.apiRequest('POST', '/api/smt/saveOperatorConfirm', operatorConfirmRequest)
        .then((response) => {
          expect(response.status).to.equal(200)
          cy.log(`👨‍🔧 作业员确认保存响应: ${response.body.code} - ${response.body.message}`)
          
          if (response.body.code === testData.responseCodes.success) {
            cy.log('✅ 作业员确认保存成功 - 真实数据库INSERT到T_SMT_PROCESS')
            expect(response.body.data).to.exist
          } else {
            cy.log(`👨‍🔧 作业员确认保存业务结果: ${response.body.code}`)
          }
        })
    })
  })

  describe('🎯 完整业务流程验证 - 真实数据库操作', () => {
    it('应该执行完整SMT流程并验证数据库插入', () => {
      cy.log('🚀 开始完整SMT业务流程测试 - 使用正确API端点')

      // 1. 验证作业员
      cy.log('👨‍🔧 步骤1: 验证作业员')
      cy.apiRequest('GET', `/api/worker/${testData.operators.valid.operatorId}`)
        .then((workerResponse) => {
          cy.log(`作业员验证: ${workerResponse.body.code}`)

          // 2. 启动SMT流程
          cy.log('📋 步骤2: 启动SMT流程')
          const smtStartRequest = {
            orderNo: testData.orders.valid.orderNo,
            orderBranchNo: testData.orders.valid.surface,
            mounterId: testData.orders.valid.machineId,
            smtSide: 'TOP'
          }

          cy.apiRequest('POST', '/api/smt/initiatePickup', smtStartRequest)
            .then((smtResponse) => {
              cy.log(`SMT流程启动: ${smtResponse.body.code}`)

              // 3. 保存作业员确认
              cy.log('👨‍🔧 步骤3: 保存作业员确认')
              const operatorConfirmRequest = {
                orderNo: testData.orders.valid.orderNo,
                orderBranchNo: testData.orders.valid.surface,
                mounterId: testData.orders.valid.machineId,
                smtSide: 'TOP',
                operatorId: testData.operators.valid.operatorId
              }

              cy.apiRequest('POST', '/api/smt/saveOperatorConfirm', operatorConfirmRequest)
                .then((confirmResponse) => {
                  cy.log(`作业员确认: ${confirmResponse.body.code}`)

                  // 4. 保存扫描记录
                  cy.log('📝 步骤4: 保存扫描记录')
                  const scanRecordRequest = {
                    orderInfo: {
                      orderNo: testData.orders.valid.orderNo,
                      orderBranchNo: testData.orders.valid.surface,
                      mounterId: testData.orders.valid.machineId,
                      smtSide: 'TOP',
                      operatorId: testData.operators.valid.operatorId
                    },
                    scanResults: [
                      {
                        partId: testData.parts.valid[0].partId,
                        rollNo: testData.parts.valid[0].rollNo,
                        lotNo: testData.parts.valid[0].lotNo,
                        scanTime: new Date().toISOString(),
                        scanStatus: 'SUCCESS'
                      }
                    ]
                  }

                  cy.apiRequest('POST', '/api/smt/saveScanRecord', scanRecordRequest)
                    .then((scanResponse) => {
                      cy.log(`扫描记录保存: ${scanResponse.body.code}`)
                      
                      // 验证整个流程
                      expect(scanResponse.status).to.equal(200)
                      expect(scanResponse.body).to.have.property('code')
                      expect(scanResponse.body).to.have.property('message')
                      
                      cy.log('🎉 完整SMT流程测试完成 - 所有操作使用正确的API端点')
                      cy.log('💾 如果响应码为00000，则表明数据已成功插入Oracle数据库')
                    })
                })
            })
        })
    })
  })
})